home *** CD-ROM | disk | FTP | other *** search
- /********************************************************************************/
- /* */
- /* FileTask.c - A/ROSE file system. */
- /* */
- /* Richard W. Mincher. December 20, 1989. */
- /* */
- /* Copyright © 1989, 1990 Apple Computer, Inc. All rights reserved. */
- /* */
- /********************************************************************************/
-
- #include "Types.h"
- #include "Events.h"
- #include "Files.h"
- #include "Memory.h"
- #include "OSUtils.h"
- #include "SegLoad.h"
-
- #include "Arose.h"
- #include "Managers.h"
-
- #include "FileTask.h"
-
- EventRecord event;
- AROSEmessage *msg;
- tid_type myTid;
- char running;
-
- main()
- {
- myTid = OpenQueue( nil );
- running = 1;
- if (myTid && !Net_Register_Task( kFileSystemObjectName, kFileSystemTypeName ))
- {
- CloseQueue();
- myTid = nil;
- }
-
- // Have to go to system folder and create A/ROSE folder if necessary.
-
- while(myTid)
- {
- (void)WaitNextEvent(everyEvent, &event, 0, nil);
- while(msg = Receive( OS_MATCH_ALL, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil ))
- {
- switch( msg->mCode )
- {
-
- case FS_OPEN:
- OpenFile();
- break;
-
- case FS_OPENRF:
- OpenRes();
- break;
-
- case FS_READ:
- ReadFile();
- break;
-
- case FS_WRITE:
- WriteFile();
- break;
-
- case FS_GETFPOS:
- GetPosition();
- break;
-
- case FS_SETFPOS:
- SetPosition();
- break;
-
- case FS_GETEOF:
- GetEndOfFile();
- break;
-
- case FS_SETEOF:
- SetEndOfFile();
- break;
-
- case FS_ALLOCATE:
- Alloc();
- break;
-
- case FS_CLOSE:
- CloseFile();
- break;
-
- case FS_CREATE:
- CreateFile();
- break;
-
- case FS_DELETE:
- DeleteFile();
- break;
-
- case FS_GETFINFO:
- GetInfo();
- break;
-
- case FS_SETFINFO:
- SetInfo();
- break;
-
- case FS_SETFLOCK:
- SetLock();
- break;
-
- case FS_RSTFLOCK:
- ResetLock();
- break;
-
- case FS_RENAME:
- RenameFile();
- break;
-
- default:
- break;
- }
- msg->mTo = msg->mFrom;
- msg->mFrom = myTid;
- msg->mCode |= 1;
- Send( msg );
- }
- if (!running)
- {
- CloseQueue();
- myTid = nil;
- }
- }
- ExitToShell();
- }
-
- OpenFile()
- {
- char fname[64];
- short refnum;
-
- (void)NetCopy( msg->mFrom, msg->mDataPtr, msg->mTo, fname, msg->mDataSize );
- fname[msg->mDataSize] = nil;
- c2pstr( fname );
- msg->mStatus = FSOpen( fname, msg->mSData[0], &refnum );
- msg->mSData[0] = refnum;
- }
-
- OpenRes()
- {
- char fname[64];
- short refnum;
-
- (void)NetCopy( msg->mFrom, msg->mDataPtr, msg->mTo, fname, msg->mDataSize );
- fname[msg->mDataSize] = nil;
- c2pstr( fname );
- msg->mStatus = OpenRF( fname, msg->mSData[0], &refnum );
- msg->mSData[0] = refnum;
- }
-
- ReadFile()
- {
- Ptr block;
- long length;
-
- length = msg->mDataSize;
- block = NewPtr( length );
- msg->mStatus = FSRead( msg->mSData[0], &length, block );
- (void)NetCopy( msg->mTo, block, msg->mFrom, msg->mDataPtr, length );
- msg->mDataSize = length;
- DisposPtr( block );
- }
-
- WriteFile()
- {
- Ptr block;
- long length;
-
- length = msg->mDataSize;
- block = NewPtr( length );
- (void)NetCopy( msg->mFrom, msg->mDataPtr, msg->mTo, block, length );
- msg->mStatus = FSWrite( msg->mSData[0], &length, block );
- msg->mDataSize = length;
- DisposPtr( block );
- }
-
- GetPosition()
- {
- msg->mStatus = GetFPos( msg->mSData[0], (long *)&(msg->mOData[0]) );
- }
-
- SetPosition()
- {
- msg->mStatus = SetFPos( msg->mSData[0], msg->mOData[0], msg->mOData[1] );
- }
-
- GetEndOfFile()
- {
- msg->mStatus = GetEOF( msg->mSData[0], (long *)&(msg->mOData[0]) );
- }
-
- SetEndOfFile()
- {
- msg->mStatus = SetEOF( msg->mSData[0], msg->mOData[0] );
- }
-
- Alloc()
- {
- msg->mStatus = Allocate( msg->mSData[0], (long *)&(msg->mOData[0]) );
- }
-
- CloseFile()
- {
- msg->mStatus = FSClose( msg->mSData[0] );
- }
-
- CreateFile()
- {
- char fname[64];
-
- (void)NetCopy( msg->mFrom, msg->mDataPtr, msg->mTo, fname, msg->mDataSize );
- fname[msg->mDataSize] = nil;
- c2pstr( fname );
- msg->mStatus = Create( fname, msg->mSData[0], msg->mSData[2], msg->mSData[1] );
- }
-
- DeleteFile()
- {
- char fname[64];
-
- (void)NetCopy( msg->mFrom, msg->mDataPtr, msg->mTo, fname, msg->mDataSize );
- fname[msg->mDataSize] = nil;
- c2pstr( fname );
- msg->mStatus = FSDelete( fname, msg->mSData[0] );
- }
-
- SetLock()
- {
- char fname[64];
-
- (void)NetCopy( msg->mFrom, msg->mDataPtr, msg->mTo, fname, msg->mDataSize );
- fname[msg->mDataSize] = nil;
- c2pstr( fname );
- msg->mStatus = SetFLock( fname, msg->mSData[0] );
- }
-
- ResetLock()
- {
- char fname[64];
-
- (void)NetCopy( msg->mFrom, msg->mDataPtr, msg->mTo, fname, msg->mDataSize );
- fname[msg->mDataSize] = nil;
- c2pstr( fname );
- msg->mStatus = RstFLock( fname, msg->mSData[0] );
- }
-
- GetInfo()
- {
- struct FInfo fi;
- char fname[64];
-
- (void)NetCopy( msg->mFrom, msg->mDataPtr, msg->mTo, fname, msg->mDataSize );
- fname[msg->mDataSize] = nil;
- c2pstr( fname );
- msg->mStatus = GetFInfo( fname, msg->mSData[0], &fi );
- (void)NetCopy( msg->mTo, (char *)&fi, msg->mFrom, msg->mDataPtr, msg->mDataSize );
- msg->mDataSize = sizeof(struct FInfo);
- }
-
- SetInfo()
- {
- struct FInfo fi;
- char fname[64];
-
- (void)NetCopy( msg->mFrom, msg->mDataPtr,
- msg->mTo, (char *)&fi, sizeof(struct FInfo) );
- (void)NetCopy( msg->mFrom, msg->mDataPtr + sizeof(struct FInfo),
- msg->mTo, fname, msg->mDataSize - sizeof(struct FInfo) );
- fname[msg->mDataSize - sizeof(struct FInfo)] = nil;
- c2pstr( fname );
- msg->mStatus = GetFInfo( fname, msg->mSData[0], &fi );
- }
-
- RenameFile()
- {
- char ofn[64];
- char nfn[64];
-
- (void)NetCopy( msg->mFrom, msg->mDataPtr,
- msg->mTo, ofn, msg->mSData[1] );
- ofn[msg->mSData[1]] = nil;
-
- (void)NetCopy( msg->mFrom, msg->mDataPtr + msg->mSData[1],
- msg->mTo, nfn, msg->mSData[2] );
- nfn[msg->mSData[2]] = nil;
-
- msg->mStatus = Rename( ofn, msg->mSData[0], nfn );
- }